package com.atpudong0420;


class Res{
	/**
	 * 定义一个共享资源
	 */
	public String name;
	public String sex;
	//flag false out线程未读取值
	public boolean flag=false;
}

/**
 * 定义写的线程
 * @author 邓世豪
 *
 */
class InpThread extends Thread{
	private Res res;
	public InpThread(Res res){
		this.res=res;
	}
	public void run(){
		int count=0;
		while(true){
			synchronized (res) {
				if(res.flag){
					try {
						//wait(),让当前线程从运行状态变为休眠状态，使用在多线程之间同步和
						//synchronized一起使用，wait方法释放锁，但是sleep不可以
						res.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				if(count==0){
					res.name="deng";
					res.sex="nan";
				}else{
					res.name="li";
					res.sex="nv";
				}
				count=(count+1)%2;//实现基数和偶数
				res.flag=true;
				res.notify();
			}			
		}
		
	}
}
/**
 * 定义读的线程
 * @author 邓世豪
 *
 */
class OutThread extends Thread{
	private Res res;
	public OutThread(Res res){
		this.res=res;
	}
	
	public void run(){
		while(true){
			synchronized (res) {
				if(!res.flag){
					try {
						res.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				System.out.println(res.name+"----"+res.sex);
				res.flag=false;
				//和wait一起使用，唤醒另一个线程
				res.notify();
			}
		
		}
	}
}
public class ThreadDemo {
	public static void main(String[] args) {
		Res res=new Res();
		InpThread inpthread=new InpThread(res);
		OutThread outthread=new OutThread(res);
		inpthread.start();
		outthread.start();
	}
		
}
